home *** CD-ROM | disk | FTP | other *** search
/ Aminet 28 / Aminet 28 (1998)(GTI - Schatztruhe)[!][Dec 1998].iso / Aminet / docs / misc / amigapl.9801.lzh / log / text0149.txt < prev    next >
Encoding:
Text File  |  1998-01-30  |  3.3 KB  |  120 lines

  1.  
  2.   Hi !
  3.  
  4.    Jakis  czas  temu  zaczalem  pisac playerka do sampli.  W chwili obecnej
  5. program nie strzela Enforcerem ale mam teraz inny problem. Poniewaz program
  6. ma byc 100% zgodny z systemem to do odtwarzania uzywam audio.device i tu
  7. pojawia sie problem - by odtworzyc sampla dluzszego niz 64KB trzeba uzyc
  8. double bufferingu. Znalazlem gdzies odpowiednia rutynke i zaadoptowalem ja
  9. do wlasnych potrzeb. Calosc jest ponizej. Niestety to nie dziala - moze
  10. ktos wie co i potrafi wskazac bledy ??? Zaznaczam, ze wolalbym odpowiedzi
  11. jak to zrobic w E ale nie pogardze procedura w C lub Pascalu.
  12.  
  13.  Z gory dzieki.
  14.  
  15. -> cut Here 
  16.  
  17. DEF au_replyport  = NIL : PTR TO mp,
  18.     au_replyport1 = NIL : PTR TO mp,
  19.     au_replyport2 = NIL : PTR TO mp,
  20.     au_audioio  = NIL : PTR TO ioaudio,
  21.     au_audioio1 = NIL : PTR TO ioaudio,
  22.     au_audioio2 = NIL : PTR TO ioaudio
  23.  
  24.   IF (au_replyport  := CreateMsgPort())      = NIL THEN Raise(ERR_NO_PORT)
  25.   IF (au_replyport1 := CreateMsgPort())      = NIL THEN Raise(ERR_NO_PORT)
  26.   IF (au_replyport2 := CreateMsgPort())      = NIL THEN Raise(ERR_NO_PORT)
  27.   IF (au_audioio    := New (SIZEOF ioaudio)) = NIL THEN Raise(ERR_NO_MEM)
  28.   IF (au_audioio1   := New (SIZEOF ioaudio)) = NIL THEN Raise(ERR_NO_MEM)
  29.   IF (au_audioio2   := New (SIZEOF ioaudio)) = NIL THEN Raise(ERR_NO_MEM)
  30.  
  31.   au_audioio1::io::mn::ln.pri   := 127
  32.   au_audioio1::io::mn.replyport := au_replyport1
  33.   au_audioio1.allockey := NIL
  34.   au_audioio1.data     := [1,2,4,8]:CHAR
  35.   au_audioio1.length   := 4
  36.  
  37.   IF (au_allocerror := OpenDevice('audio.device',NIL,au_audioio1,NIL)) THEN Raise(ERR_NO_AUDIO)
  38.  
  39. PROC au_PlaySample(wf,sl)
  40.  
  41.   DEF position = 0,
  42.       samplen,
  43.       nowlen,
  44.       port
  45.  
  46.   samplen  := sl
  47.   position := wf
  48.   stop()
  49.  
  50.   au_audioio1::io.command := CMD_WRITE
  51.   au_audioio1::io.flags := ADIOF_PERVOL
  52.   au_audioio1.period := Div(au_clock,frequency)
  53.   au_audioio1.volume := 64
  54.   au_audioio1.cycles := 1
  55.   au_audioio2 := au_audioio1
  56.   au_audioio1::io::mn.replyport := au_replyport1
  57.   au_audioio2::io::mn.replyport := au_replyport2
  58.   au_audioio::io::mn.replyport  := au_replyport
  59.  
  60. -> Double buffering
  61.  
  62.   au_audioio1.data   := wf
  63.   au_audioio1.length := 64000
  64.   sl  := sl - 64000
  65.   IF sl > 64000
  66.     nowlen := 64000
  67.   ELSE
  68.     nowlen := sl
  69.   ENDIF      
  70.   au_audioio2.data   := wf + 64000
  71.   au_audioio2.length := nowlen
  72.   sl := sl -nowlen
  73.  
  74.   beginio(au_audioio1)
  75.   beginio(au_audioio2)
  76.  
  77.   au_replyport := au_replyport1
  78.   au_audioio   := au_audioio1
  79.   port := 1
  80.  
  81.   WHILE sl > 0  
  82.     Wait(au_replyport)
  83.     GetMsg(au_replyport)
  84.     IF sl > 64000
  85.       au_audioio.data   := position
  86.       au_audioio.length := 64000
  87.       sl := sl - 64000
  88.       position := position + 64000
  89.     ELSE
  90.       au_audioio.data   := position
  91.       au_audioio.length := sl
  92.       position := position + sl
  93.       sl := 0
  94.     ENDIF      
  95.     beginio(au_audioio)
  96.     SELECT port
  97.       CASE 1
  98.         au_audioio   := au_audioio2
  99.         au_replyport := au_replyport2
  100.         port := 2
  101.       CASE 2
  102.         au_audioio   := au_audioio1
  103.         au_replyport := au_replyport1
  104.         port := 1
  105.     ENDSELECT
  106.   ENDWHILE
  107. ENDIF
  108.  
  109. ENDPROC
  110.  
  111.  
  112.   Zegnam ..
  113.  
  114. ------
  115.  Marcin Juszkiewicz (Szczepan/SubBlaBla)   *Team Amiga*
  116.  szczepan@cksr.ac.bialystok.pl  http://cksr.ac.bialystok.pl/szczepan/
  117.  A1200 BlizzIv 2+8MB RAM 425MB HDD
  118.  Author of MultiView for OS 2.0+ -> Aminet:util/sys/2b_mv_os2_x.lha
  119.  
  120.